from google.adk.agents import LlmAgent
from google.adk.models import Model
from google.adk.tools import FunctionTool

# 你可以根据实际情况选择模型，这里用Gemini作为示例
MODEL_NAME = 'gemini-2.0-flash-live-preview-04-09'

# 定义CEFR级别
CEFR_LEVELS = ['A1', 'A2', 'B1', 'B2', 'C1', 'C2']

# 工具：自动生成题目
# 这里用FunctionTool包装一个Python函数，实际调用大模型生成题目

def generate_question(level: str) -> dict:
    """
    根据CEFR级别生成一道英语题目（选择题或填空题），返回题干、选项、答案。
    """
    prompt = f"""
    你是一名专业的少儿英语老师。请根据欧洲语言共同参考框架（CEFR）{level}级别，随机生成一道英语笔试题，可以是选择题或填空题。题目内容要适合儿童，题目类型和内容要多样化。
    - 如果是选择题，请给出题干、4个选项、正确答案。
    - 如果是填空题，请给出题干（用____表示空）、正确答案。
    - 返回格式为JSON，字段包括：type（'choice'或'blank'）、question、options（如有）、answer。
    """
    # 这里假设ADK的FunctionTool会自动用大模型处理prompt
    # 实际部署时可用LiteLLM等方式调用大模型
    import json
    # 伪代码：实际应调用大模型API
    # result = call_llm(prompt)
    # return json.loads(result)
    # 这里返回一个示例
    if level == 'A1':
        return {
            'type': 'choice',
            'question': 'What color is the sky on a sunny day?',
            'options': ['Blue', 'Green', 'Red', 'Yellow'],
            'answer': 'Blue'
        }
    else:
        return {
            'type': 'blank',
            'question': 'She ____ to school every day.',
            'answer': 'goes'
        }

# 工具：评价孩子的答案

def evaluate_answer(question: dict, user_answer: str) -> str:
    """
    根据题目和孩子的答案，给出评价（对/错+简短鼓励/解释）。
    """
    correct = False
    if question['type'] == 'choice' or question['type'] == 'blank':
        correct = (user_answer.strip().lower() == question['answer'].strip().lower())
    if correct:
        return '回答正确！做得很好！'
    else:
        return f"回答不正确。正确答案是：{question['answer']}。继续加油！"

# 包装为ADK工具
question_tool = FunctionTool(
    name='generate_question',
    description='根据CEFR级别生成一道英语题目',
    func=generate_question,
    args_schema={'level': str},
    return_schema={'type': str, 'question': str, 'options': list, 'answer': str}
)

evaluate_tool = FunctionTool(
    name='evaluate_answer',
    description='根据题目和孩子的答案给出评价',
    func=evaluate_answer,
    args_schema={'question': dict, 'user_answer': str},
    return_schema={'evaluation': str}
)

# Agent主指令
INSTRUCTION = f"""
你是一名友善的少儿英语AI老师，帮助孩子学习英语。流程如下：
1. 首先让用户选择CEFR级别（A1, A2, B1, B2, C1, C2）。
2. 然后自动调用generate_question工具出题。
3. 等待孩子回答。
4. 调用evaluate_answer工具给出评价。
5. 鼓励孩子继续答题。
题目类型包括选择题和填空题，题目内容要适合儿童。
"""

# 创建Agent
english_teacher_agent = LlmAgent(
    model=MODEL_NAME,
    name='english_teacher_agent',
    instruction=INSTRUCTION,
    tools=[question_tool, evaluate_tool]
)

if __name__ == '__main__':
    # 启动ADK本地web界面
    from google.adk.engine import run_web
    run_web(english_teacher_agent) 